import json

import numpy as np
import pandas as pd
import yaml
from yaml import SafeLoader
from datareport.api.DataSource import DataSource
from datareport.api.annotation.Font import Font
from datareport.impl.paragraph.base.BaseParagraph import BaseParagraph
from datareport.api.annotation.Style import style


@style()
class KaiZhanQingKuang_zhiliangpinjia_erji_52(BaseParagraph):
    """
    本年度校级组织生活 开展质量评价-整体
     对 教 师 党 支 部 和 学 生 党 支 部 的 分 类 评 价 来 看 ，\
教 师 党 支 部 整 体 得 分 高 于 学 生 党 支 部 。 具 体 情 况 如 下 表 。
    """

    def __init__(self):
        super().__init__()
        self.text = '''2 、从 二 级 党 组 织 层 面 来 看 ： 各 二 级 党 组 织 所 属 党 支部 \n 
观 摩 评 价后 得 分 分 布 见 下 表 。 其 中 ，{}观 摩 评 价 得 分 最 低 ， '''

        self.sort = 41
        self.section = 13

    def plot(self, df, plt):
        pass

    def getData(self, result):
        pass

    def start(self, conn, year, plt):
        df = pd.read_sql('''select topic16,p.partyBranchName,p.partyOrgName 
        from t_observerRecord r 
        inner join t_meetingPlan p 
        on r.activityId=p.activityId
        where topic16 is not null and year(r.createTime)={}'''.format(year), con=conn)
        ##
        record_df = pd.DataFrame(columns=['二级党组织', '党支部', '综合得分', '工作体现程度', '可借鉴情况'])
        df = parser(record_df, df)
        df['评价表数量'] = 1
        jc_df = df.groupby(['二级党组织','党支部']).agg({'综合得分': 'mean', '工作体现程度': 'mean', '可借鉴情况': 'mean', '评价表数量': 'sum'}).reset_index(drop=False)
        erji_df = jc_df.groupby('二级党组织').agg({'综合得分': 'mean', '工作体现程度': 'mean', '可借鉴情况': 'mean', '评价表数量': 'sum'}).reset_index(drop=False)
        ## 得分最低的
        value1=erji_df.loc[erji_df['综合得分']==erji_df['综合得分'].min(),'二级党组织'].values.tolist()
        value2=erji_df.loc[erji_df['综合得分']==erji_df['综合得分'].max(),'二级党组织'].values.tolist()
        for v in value1:
            temp=jc_df[jc_df['二级党组织']==v].reset_index(drop=True)
            temp.rename(columns={'二级党组织':'综合得分最低的二级党组织'},inplace=True)
            self.tables.append(temp.round({'综合得分': 1, '工作体现程度': 1, '可借鉴情况': 1}))

        for v in value2:
            temp=jc_df[jc_df['二级党组织']==v].reset_index(drop=True)
            temp.rename(columns={'二级党组织':'综合得分最高的二级党组织'},inplace=True)
            self.tables.append(temp.round({'综合得分': 1, '工作体现程度': 1, '可借鉴情况': 1}))

        self.fonts.append(Font(text=self.text.replace(' ','').replace('\n','').format('、'.join(value1))))
        # 保留1位小数
        erji_df = erji_df.round({'综合得分': 1, '工作体现程度': 1, '可借鉴情况': 1})
        self.tables.append(erji_df)


def parser(record_df, df):
    for i in np.arange(len(df)):
        record = json.loads(df.iloc[i]['topic16'])
        ## 工作体现程度
        workReflection = 0
        ## 借鉴情况
        reference = 0
        ## 综合得分
        overall = 0
        for b in record[0]['body']:
            workReflection += b['value'] / len(record[0]['body'])
            overall += b['value'] / (len(record[0]['body']) + len(record[1]['body']))
        for b in record[1]['body']:
            reference += b['value'] / len(record[1]['body'])
            overall += b['value'] / (len(record[0]['body']) + len(record[1]['body']))
        record_df = record_df.append({'二级党组织': df.iloc[i]['partyOrgName'], '党支部': df.iloc[i]['partyBranchName'],
                                      '综合得分': round(overall,1), '工作体现程度': round(workReflection,1), '可借鉴情况': round(reference,1)}, ignore_index=True)
    return record_df


def list2str(l):
    return '、'.join(l)


if __name__ == '__main__':
    with open('D:\work\sanhuiyike\datareport\config.yaml', encoding='utf-8') as f:
        data = yaml.load(f, Loader=SafeLoader)
    con = DataSource(data['datasource']).conn
    KaiZhanQingKuang_zhiliangpinjia_erji_52().start(con, 2023, '')
